package devcontainer

import (
	"code.gitea.io/gitea/modules/base"
	DevcontainersVO "code.gitea.io/gitea/routers/api/devcontainer/vo"
	gitea_web_context "code.gitea.io/gitea/services/context"
	DevcontainersService "code.gitea.io/gitea/services/devstar_devcontainer"
	"net/http"
)

const (
	tplGetRepoDevcontainerDetail base.TplName = "repo/devcontainer/details"
)

// GetRepoDevContainerDetails 获取仓库 Dev Container 详细信息
func GetRepoDevContainerDetails(ctx *gitea_web_context.Context) {

	// 1. 查询当前 Repo 已有的 Dev Container 信息
	opts := &DevcontainersVO.RepoDevcontainerOptions{
		Actor:      ctx.Doer,
		Repository: ctx.Repo.Repository,
	}
	//ctx.Repo.RepoLink == ctx.Repo.Repository.Link()
	devContainerMetadata, err := DevcontainersService.GetRepoDevcontainerDetails(ctx, opts)
	hasDevContainer := err == nil && devContainerMetadata.DevContainerId > 0
	ctx.Data["HasDevContainer"] = hasDevContainer
	if hasDevContainer {
		ctx.Data["DevContainer"] = devContainerMetadata
	}

	// 2. 检查当前仓库的当前分支是否存在有效的 /.devcontainer/devcontainer.json
	isValidRepoDevcontainerJson := isValidRepoDevcontainerJsonFile(ctx)
	if !hasDevContainer && !isValidRepoDevcontainerJson {
		ctx.Flash.Error(ctx.Tr("repo.dev_container_invalid_config_prompt"), true)
	}

	// 3. 携带数据渲染页面，返回
	ctx.Data["Title"] = ctx.Locale.Tr("repo.dev_container")
	ctx.Data["PageIsRepoDevcontainerDetails"] = true
	ctx.Data["HasValidDevContainerJSON"] = isValidRepoDevcontainerJson
	ctx.Data["Repository"] = ctx.Repo.Repository
	ctx.Data["ContextUser"] = ctx.Doer
	ctx.HTML(http.StatusOK, tplGetRepoDevcontainerDetail)
}
